/**
* ControlP5 Textfield
*
*
* find a list of public methods available for the Textfield Controller
* at the bottom of this sketch.
*
* by Andreas Schlegel, 2012
* www.sojamo.de/libraries/controlp5
*
*/

import controlP5.*;

ControlP5 cp5;
ArrayList<String> nameList = new ArrayList<String>();
ArrayList<String> passList = new ArrayList<String>();
ArrayList<Integer> scoreList = new ArrayList<Integer>();

String textValue = "";
int player = 0;
Textarea myTextarea;
Textarea users;

void setup() {
  size(960,700);
  
  PFont font = createFont("arial",20);
  
  cp5 = new ControlP5(this);
  
  cp5.addTextfield("user name")
     .setPosition(20,20)
     .setSize(200,40)
     .setFont(font)
     .setFocus(true)
     .setColor(color(255,0,0))
     ;               
  cp5.addTextfield("password")
     .setPosition(20,100)
     .setSize(200,40)
     .setFont(createFont("arial",20))
     .setAutoClear(false)
     ;
  cp5.addButton("clear")
     .setPosition(250,100)
     .setSize(50,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ;         
  cp5.addButton("sign in")
     .setPosition(20,180)
     .setSize(50,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ;  
//------------------------------------------------------------------sign up--------------------------------------------------
  cp5.addTextfield("user name:")
     .setPosition(400,20)
     .setSize(200,40)
     .setFont(font)
     .setFocus(true)
     .setColor(color(255,0,0))
     ;
  cp5.addTextfield("password:")
     .setPosition(400,100)
     .setSize(200,40)
     .setFont(createFont("arial",20))
     .setAutoClear(false)
     ;
  cp5.addButton("reset")
     .setPosition(630,100)
     .setSize(50,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ;         
  cp5.addButton("sign up")
     .setPosition(400,180)
     .setSize(50,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ; 
//---------------------------------------------------------------exit and help-------------------------
  cp5.addButton("Exit")
     .setPosition(20,500)
     .setSize(80,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ;         
  cp5.addButton("Help")
     .setPosition(120,500)
     .setSize(80,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ;  
   cp5.addButton("List of users")
     .setPosition(230,500)
     .setSize(100,40)
     .getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
     ;    
 myTextarea =   cp5.addTextarea("txt")
     .setPosition(20,250)
     .setSize(200,200)
     .setFont(createFont("arial",12))
     .setLineHeight(14)
     .setColor(color(0))
     .setColorBackground(color(255,100))
     .setColorForeground(color(255,100))
     .setVisible(false);
  users =   cp5.addTextarea("users")
     .setPosition(250,250)
     .setSize(200,200)
     .setFont(createFont("arial",12))
     .setLineHeight(14)
     .setColor(color(0))
     .setColorBackground(color(255,100))
     .setColorForeground(color(255,100))
     .setVisible(false);
     
  textFont(font);
}

void draw() {
  background(125);
  fill(125);
}

public void clear() {
  cp5.get(Textfield.class,"password").clear();
  cp5.get(Textfield.class,"user name").clear();
}

public void reset() {
  cp5.get(Textfield.class,"password:").clear();
  cp5.get(Textfield.class,"user name:").clear();
}
public void signUp(){
  String name = cp5.get(Textfield.class,"user name:").getText();
  if(name.equals("")){
      myTextarea.setVisible(true)
                .setText("please enter the user name");     
      cp5.get(Textfield.class,"user name:").clear();
      cp5.get(Textfield.class,"password:").clear();

  }else{
      String pass = cp5.get(Textfield.class,"password:").getText();
      if(pass.equals("")){
      myTextarea.setVisible(true)
                .setText("please enter the password");  
      cp5.get(Textfield.class,"password:").clear();
      }else{
       cp5.get(Textfield.class,"password:").clear();      
        cp5.get(Textfield.class,"user name:").clear();
       myTextarea.setVisible(true)
                .setText("successfull account");  
       nameList.add(name);
       passList.add(pass);
       scoreList.add(0);
      }
  }
}
public void signIn() {
  String name = cp5.get(Textfield.class,"user name").getText();
  int index = 0;
  for(int i=0;i<nameList.size();i++){
    if(name.equals(nameList.get(i))){
        index = i+1;
    }
  }
  if(index!=0){
    String pass = cp5.get(Textfield.class,"password").getText();
    if(pass.equals(passList.get(index-1))){
        println(nameList + " " + passList + " " + scoreList);
        myTextarea.setVisible(false);
    }else{
       myTextarea.setVisible(true)
                .setText("the password you entered is incorrect"); 
      cp5.get(Textfield.class,"password").clear();
    }
    player =index;
  }else{
  myTextarea.setVisible(true)
                .setText("the user name you entered is incorrect");      
      cp5.get(Textfield.class,"user name").clear();
      cp5.get(Textfield.class,"password").clear();

  }
}

void controlEvent(ControlEvent theEvent) {
  if(theEvent.isController()) {
     if(theEvent.controller().name()=="sign in") {
     signIn();
    } 
    if(theEvent.controller().name()=="sign up") {
       users.setVisible(false);
       myTextarea.setVisible(false);
       signUp();
    }
    if(theEvent.controller().name()=="Exit") {
      System.exit(0);
    } 
    if(theEvent.controller().name()=="Help") {
       users.setVisible(false);
       myTextarea.setVisible(true)
       .setText("please sign up to the game if you don't have an account yet or please sign in with your account"); 
    }if(theEvent.controller().name()=="List of users") {
       myTextarea.setVisible(false);
       users.setVisible(true)
            .setText("Name List: " + nameList + "\nScore List: " + scoreList);   
          }
  }
}/*
public void input(String theText) {
  // automatically receives results from controller input
  println("a textfield event for controller 'user name' : "+theText);
}*/

/*
a list of all methods available for the Textfield Controller
use ControlP5.printPublicMethodsFor(Textfield.class);
to print the following list into the console.

You can find further details about class Textfield in the javadoc.

Format:
ClassName : returnType methodName(parameter type)

controlP5.Textfield : String getText() 
controlP5.Textfield : Textfield clear() 
controlP5.Textfield : Textfield keepFocus(boolean) 
controlP5.Textfield : Textfield setAutoClear(boolean) 
controlP5.Textfield : Textfield setFocus(boolean) 
controlP5.Textfield : Textfield setFont(ControlFont) 
controlP5.Textfield : Textfield setFont(PFont) 
controlP5.Textfield : Textfield setFont(int) 
controlP5.Textfield : Textfield setText(String) 
controlP5.Textfield : Textfield setValue(String) 
controlP5.Textfield : Textfield setValue(float) 
controlP5.Textfield : boolean isAutoClear() 
controlP5.Textfield : int getIndex() 
controlP5.Textfield : void draw(PApplet) 
controlP5.Textfield : void keyEvent(KeyEvent) 
controlP5.Textfield : void setInputFilter(int) 
controlP5.Textfield : void setPasswordMode(boolean) 
controlP5.Controller : CColor getColor() 
controlP5.Controller : ControlBehavior getBehavior() 
controlP5.Controller : ControlWindow getControlWindow() 
controlP5.Controller : ControlWindow getWindow() 
controlP5.Controller : ControllerProperty getProperty(String) 
controlP5.Controller : ControllerProperty getProperty(String, String) 
controlP5.Controller : Label getCaptionLabel() 
controlP5.Controller : Label getValueLabel() 
controlP5.Controller : List getControllerPlugList() 
controlP5.Controller : PImage setImage(PImage) 
controlP5.Controller : PImage setImage(PImage, int) 
controlP5.Controller : PVector getAbsolutePosition() 
controlP5.Controller : PVector getPosition() 
controlP5.Controller : String getAddress() 
controlP5.Controller : String getInfo() 
controlP5.Controller : String getName() 
controlP5.Controller : String getStringValue() 
controlP5.Controller : String toString() 
controlP5.Controller : Tab getTab() 
controlP5.Controller : Textfield addCallback(CallbackListener) 
controlP5.Controller : Textfield addListener(ControlListener) 
controlP5.Controller : Textfield bringToFront() 
controlP5.Controller : Textfield bringToFront(ControllerInterface) 
controlP5.Controller : Textfield hide() 
controlP5.Controller : Textfield linebreak() 
controlP5.Controller : Textfield listen(boolean) 
controlP5.Controller : Textfield lock() 
controlP5.Controller : Textfield plugTo(Object) 
controlP5.Controller : Textfield plugTo(Object, String) 
controlP5.Controller : Textfield plugTo(Object[]) 
controlP5.Controller : Textfield plugTo(Object[], String) 
controlP5.Controller : Textfield registerProperty(String) 
controlP5.Controller : Textfield registerProperty(String, String) 
controlP5.Controller : Textfield registerTooltip(String) 
controlP5.Controller : Textfield removeBehavior() 
controlP5.Controller : Textfield removeCallback() 
controlP5.Controller : Textfield removeCallback(CallbackListener) 
controlP5.Controller : Textfield removeListener(ControlListener) 
controlP5.Controller : Textfield removeProperty(String) 
controlP5.Controller : Textfield removeProperty(String, String) 
controlP5.Controller : Textfield setArrayValue(float[]) 
controlP5.Controller : Textfield setArrayValue(int, float) 
controlP5.Controller : Textfield setBehavior(ControlBehavior) 
controlP5.Controller : Textfield setBroadcast(boolean) 
controlP5.Controller : Textfield setCaptionLabel(String) 
controlP5.Controller : Textfield setColor(CColor) 
controlP5.Controller : Textfield setColorActive(int) 
controlP5.Controller : Textfield setColorBackground(int) 
controlP5.Controller : Textfield setColorCaptionLabel(int) 
controlP5.Controller : Textfield setColorForeground(int) 
controlP5.Controller : Textfield setColorValueLabel(int) 
controlP5.Controller : Textfield setDecimalPrecision(int) 
controlP5.Controller : Textfield setDefaultValue(float) 
controlP5.Controller : Textfield setHeight(int) 
controlP5.Controller : Textfield setId(int) 
controlP5.Controller : Textfield setImages(PImage, PImage, PImage) 
controlP5.Controller : Textfield setImages(PImage, PImage, PImage, PImage) 
controlP5.Controller : Textfield setLabelVisible(boolean) 
controlP5.Controller : Textfield setLock(boolean) 
controlP5.Controller : Textfield setMax(float) 
controlP5.Controller : Textfield setMin(float) 
controlP5.Controller : Textfield setMouseOver(boolean) 
controlP5.Controller : Textfield setMoveable(boolean) 
controlP5.Controller : Textfield setPosition(PVector) 
controlP5.Controller : Textfield setPosition(float, float) 
controlP5.Controller : Textfield setSize(PImage) 
controlP5.Controller : Textfield setSize(int, int) 
controlP5.Controller : Textfield setStringValue(String) 
controlP5.Controller : Textfield setUpdate(boolean) 
controlP5.Controller : Textfield setValueLabel(String) 
controlP5.Controller : Textfield setView(ControllerView) 
controlP5.Controller : Textfield setVisible(boolean) 
controlP5.Controller : Textfield setWidth(int) 
controlP5.Controller : Textfield show() 
controlP5.Controller : Textfield unlock() 
controlP5.Controller : Textfield unplugFrom(Object) 
controlP5.Controller : Textfield unplugFrom(Object[]) 
controlP5.Controller : Textfield unregisterTooltip() 
controlP5.Controller : Textfield update() 
controlP5.Controller : Textfield updateSize() 
controlP5.Controller : boolean isActive() 
controlP5.Controller : boolean isBroadcast() 
controlP5.Controller : boolean isInside() 
controlP5.Controller : boolean isLabelVisible() 
controlP5.Controller : boolean isListening() 
controlP5.Controller : boolean isLock() 
controlP5.Controller : boolean isMouseOver() 
controlP5.Controller : boolean isMousePressed() 
controlP5.Controller : boolean isMoveable() 
controlP5.Controller : boolean isUpdate() 
controlP5.Controller : boolean isVisible() 
controlP5.Controller : float getArrayValue(int) 
controlP5.Controller : float getDefaultValue() 
controlP5.Controller : float getMax() 
controlP5.Controller : float getMin() 
controlP5.Controller : float getValue() 
controlP5.Controller : float[] getArrayValue() 
controlP5.Controller : int getDecimalPrecision() 
controlP5.Controller : int getHeight() 
controlP5.Controller : int getId() 
controlP5.Controller : int getWidth() 
controlP5.Controller : int listenerSize() 
controlP5.Controller : void remove() 
controlP5.Controller : void setView(ControllerView, int) 
java.lang.Object : String toString() 
java.lang.Object : boolean equals(Object) 
*/
